import {reqCartList, reqDeleteCartById, reqUpdateCheckedById} from "@/api"

// detail 模块的小仓库
export default ({
    // 仓库存储数据的地方
    state: {
        cartList: []
    },
    // 唯一修改state的地方
    mutations: {
        GETCARTLIST(state, cartList) {
            state.cartList = cartList;
        }
    },
    // 可以书写业务逻辑 也可以处理异步
    actions: {
        // 获取购物车列表数据
        async getCartList({commit}) {
            let result = await reqCartList();
            // console.log(result);
            if(result.code == 200) {
                commit("GETCARTLIST", result.data);
            }
        },
        // 删除购物车某一个产品
        async deleteCartListBySkuId({commit}, skuId) {
            let result = await reqDeleteCartById(skuId);
            if(result.code == 200) {
                return "ok";
            }else {
                return Promise.reject(new Error("faile"));
            }
        },
        // 获取购物车列表数据
        async updateCheckedById({commit}, {skuId, isChecked}) {
            let result = await reqUpdateCheckedById(skuId, isChecked);
            if(result.code == 200) {
                return "ok";
            }else {
                return Promise.reject(new Error("faile"));
            }
        },
        // 删除购物车勾选的产品
        deleteAllCheckedCart({dispatch, getters}) {
            // context小仓库：commit(提交mutations修改state) getter(计算属性) dispatch(派发action)
            // console.log(context);
            // 获取购物车中全部的产品(是一个数组)
            let PromiseAll = [];
            getters.cartList.cartInfoList.forEach(item => {
                let promise = item.isChecked == 1 ? dispatch('deleteCartListBySkuId', item.skuId) : '';
                // 将每一次返回的Promise添加到数组中
                PromiseAll.push(promise);
            })
            // 只要全部的p1|p2...都成功 返回结果为成功 有一个失败 返回失败结果
            return Promise.all(PromiseAll);
        },
        // 修改全部产品的勾选状态
        updateAllCartIsChecked({dispatch, state}, isChecked) {
            // console.log(state);
            // console.log(isChecked);
            let promiseAll = [];
            state.cartList[0].cartInfoList.forEach(item => {
                let promise = dispatch('updateCheckedById', {skuId: item.skuId, isChecked});
                promiseAll.push(promise);
            })
            // 最终返回结果
            return Promise.all(promiseAll);
        }
    },
    // 简化数据
    getters: {
        cartList(state) {
            return state.cartList[0] || {};
        }
    }
})